home *** CD-ROM | disk | FTP | other *** search
/ Aminet 5 / Aminet 5 - March 1995.iso / Aminet / misc / amag / AM9402_2.lha / mmu-artikel / sinuskurve.asm < prev    next >
Assembly Source File  |  1993-10-03  |  2KB  |  105 lines

  1. * Das folgende Programm zeichnet eine Sinuskurve mit hilfe der FPU im
  2. * Bereich von -2Pi bis +2Pi.
  3.  
  4.         MC68040
  5.  
  6.         SECTION    CODE
  7.  
  8.         include    "exec/exec_lib.i"
  9.         include    "graphics/gfx.i"
  10.         include    "graphics/graphics_lib.i"
  11.         include    "intuition/intuition.i"
  12.         include    "intuition/intuition_lib.i"
  13.         include    "intuition/screens.i"
  14.  
  15.         lea.l    IntName,a1
  16.         moveq    #0,d0
  17.         CALLEXEC    OpenLibrary        ; Intuition öffnen
  18.         move.l    d0,_IntuitionBase
  19.         beq    NoInt
  20.         lea.l    GrafName,a1
  21.         moveq    #0,d0
  22.         jsr    _LVOOpenLibrary(a6)    ; Graphics öffnen
  23.         move.l    d0,_GfxBase
  24.         beq    NoGfx
  25.  
  26.         sub.l    a0,a0
  27.         lea.l    WinTags,a1
  28.         CALLINT    OpenWindowTagList        ; Fenster öffnen
  29.         move.l    d0,SinWin
  30.         beq    NoWin
  31.         move.l    d0,a5
  32.         move.l    wd_RPort(a5),a5        ; RastPort immer a5
  33.         move.l    a5,a1
  34.         moveq    #1,d0
  35.         CALLGRAF    SetAPen                    ; Vordergrundfarbe = 1
  36.         move.l    a5,a1
  37.         move.w    #320,d0
  38.         moveq    #51,d1
  39.         jsr    _LVOMove(a6)        ; Koordinatensystem
  40.         move.l    a5,a1
  41.         move.w    #320,d0
  42.         move.w    #160,d1
  43.         jsr    _LVODraw(a6)        ; Y-Achse
  44.         move.l    a5,a1
  45.         move.w    #635,d0
  46.         moveq    #111,d1
  47.         jsr    _LVOMove(a6)        ; und
  48.         move.l    a5,a1
  49.         moveq    #4,d0
  50.         moveq    #111,d1
  51.         jsr    _LVODraw(a6)        ; X-Achse
  52.         move.l    a5,a1
  53.         moveq    #3,d0
  54.         jsr    _LVOSetAPen(a6)        ; Vordergrundfarbe = 3
  55.  
  56.         fatan.x    #1,fp0
  57.         fmul.x    #4*2,fp0            ; 4 * (ATAN 1) = Pi
  58.         fmove.x    fp0,fp7
  59.         fdiv.x    #631,fp7            ; 631 Schritte (Pixel)
  60.         fneg.x    fp0            ; Start bei -2Pi
  61.         move.w    #630,d7            ; Schleifenzähler
  62. SinLoop        fsin.x    fp0,fp1            ; der Sinus
  63.         fmul.x    #50,fp1            ; vergrößern um Faktor 50
  64.         fint.x    fp1            ; Runden
  65.         move.w    #634,d0
  66.         sub.w    d7,d0
  67.         fmove.l    fp1,d1
  68.         add.w    #111,d1
  69.         move.l    a5,a1
  70.         jsr    _LVODraw(a6)        ; einzeichnen
  71.         fadd.x    fp7,fp0            ; einen Scritt weiter
  72.         dbra    d7,SinLoop        ; fertig ?
  73.  
  74.         move.l    SinWin,a0        ; Wenn ja, warten
  75.         move.l    wd_UserPort(a0),a0
  76.         CALLEXEC    WaitPort            ; bis Fenster geschloßen
  77.  
  78. Ende        move.l    SinWin,a0
  79.         CALLINT    CloseWindow        ; Fenster zu
  80. NoWin        move.l    _GfxBase,a1
  81.         CALLEXEC    CloseLibrary        ; Graphics schließen
  82. NoGfx        move.l    _IntuitionBase,a1
  83.         jsr    _LVOCloseLibrary(a6)    ; Intuition schließen
  84. NoInt        rts
  85.  
  86. WinTags        dc.l    WA_Left,0        ; Tags für OpenWindowTagList
  87.         dc.l    WA_Top,0
  88.         dc.l    WA_Width,640
  89.         dc.l    WA_Height,200
  90.         dc.l    WA_Title,WinTit
  91.         dc.l    WA_Flags,WFLG_ACTIVATE!WFLG_CLOSEGADGET!WFLG_DEPTHGADGET!WFLG_DRAGBAR
  92.         dc.l    WA_IDCMP,IDCMP_CLOSEWINDOW
  93.         dc.l    TAG_DONE
  94. WinTit        dc.b    'Sinuskurve mit der FPU!',0
  95.         even
  96.  
  97. SinWin            dc.l    0        ; Variable für Fensteradresse
  98.  
  99. IntName        INTNAME
  100. _IntuitionBase    dc.l    0
  101. GrafName        GRAFNAME
  102. _GfxBase        dc.l    0
  103.  
  104.         END
  105.